Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Разбиение строки по размеру (Юрий Насретдинов)
Author Message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sat Sep 06, 2003 10:50 pm ()
   Post subject: Разбиение строки по размеру
Reply with quote

Функция действует аналогично explode, только единственное различие - функция разбивает не по строке, а по размеру.

[Для поиска]: разбиение строки по размеру, explode по размеру, разбиение строки по количеству символов, explode по количеству символов

Вроде достаточно. Вот сама функция (обратите внимание на комментарии)
Code (php): скопировать код в буфер обмена
function explode_by_size($data,$size,$parts=false) //
{
        $size*=1024*1024; //
        if(strlen (www.php.net/strlen)($data)<=$size)
        {
                return array (www.php.net/array)($data);
        }else
        {
                if(!$parts) $parts=ceil (www.php.net/ceil)(strlen (www.php.net/strlen)($data)/$size); //
                //**
                $counter=0;
                $part=array (www.php.net/array)();
                //**
                while($counter<$parts)
                {
                        $counter++;
                        //**
                        $start=($counter-1)*$size;
                        //**
                        $part[]=substr (www.php.net/substr)($data,$start,$size);
                }
                //**
                return $part;
        }
}
Функция проверенно работает. $parts аналогично limit в explode, но может немного поглючивать...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Sep 07, 2003 4:23 pm (спустя 17 часов 33 минуты)
   Post subject:
Reply with quote

Размер лучше передавать в байтах, а не в мегабайтах — так универсальнее.
Ну и, наконец, разве стандартныя функция chunk_split делает не то же самое?
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Mon Sep 08, 2003 7:00 pm (спустя 1 день 2 часа 36 минут)
   Post subject:
Reply with quote

Дмитрий Котеров:
Ну, честно говоря, не совсем. Но почти то же самое. Она работает по несколько другому принципу, и вообщем, служит только для разбиения очень больщих строк. Поэтому размер в мегабайтах. Это для разбиения одного большого файла на несколько более мелких. Не спорю, что эта штука по крайней мере в 2 раза больше памяти использует, чем вся строка, но по-моему по-другому никак.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Tue Sep 09, 2003 5:05 pm (спустя 22 часа 5 минут)
   Post subject:
Reply with quote

Нет, Вы скажите: chunk_split() то же самое делает или нет? Честно говоря, городить огород из-за одного единственного умножения на 1024*1024 вряд ли стоит.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Tue Sep 09, 2003 5:40 pm (спустя 35 минут)
   Post subject:
Reply with quote

Ответ - нет, не то же самое.

Хотя аналогично. Она работает как explode, только разбивает она не по символу или строке, а по размеру строки. Например можно закомментаривать третью строчку и получится размер в байтах.

Пример использования:
Code (php): скопировать код в буфер обмена
$word="Slovo";
$parts=explode_by_size($word,1);
print_r (www.php.net/print_r)($parts);
Код разбивает слово по букве и выводит содержимое полученного результата. Chunk_split для base64 сделан, чтобы было удобнее работать с полученным результатом, так сказать... А моя функция для разбиения одного большого файла на более мелкие, по 2 мегабайта (для последующего upload'а на сервер), например, собственно для этих целей я и написал эту функцию...
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 413
   поощрить/наказать


PostPosted: Sun Sep 14, 2003 2:23 pm (спустя 4 дня 20 часов 42 минуты)
   Post subject:
Reply with quote

yUAC:
Не умеете Вы объяснять... Всего-то и надо было сказать. что chunk_split возвращает строку со вставленными разделителями, а Ваша функция — массив. Впрочем, я даже больше виноват: не посмотрел документацию.
Back to top
View user's profile Send private message Send e-mail
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 198
   поощрить/наказать

Location: 007 495

PostPosted: Sun Sep 14, 2003 3:04 pm (спустя 41 минуту)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Не умеете Вы объяснять...
Каюсь, грешен... А что поделаешь...
Back to top
View user's profile Send private message Send e-mail
tty01
Заглянувший



Joined: 23 Feb 2004
Posts: 4
Карма: 0
   поощрить/наказать

Location: .ru

PostPosted: Mon Feb 23, 2004 4:39 pm (спустя 5 месяцев 9 дней 1 час 35 минут)
   Post subject:
Reply with quote

Quote:
chunk_split возвращает строку со вставленными разделителями, а Ваша функция — массив.
В таком случае, может быть такой код был бы проще?
Code (php): скопировать код в буфер обмена
function chunk_split_2array($str, $limit)
{
        $splitter = "\x0";
        return explode (www.php.net/explode)($splitter, wordwrap (www.php.net/wordwrap)($str, $limit, $splitter, 1));
}
print_r (www.php.net/print_r)( chunk_split_2array('Slovo', 1) );
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML